"use client"

import { GalleryVerticalEnd, MoreHorizontal } from "lucide-react"

import {
   Breadcrumb,
   BreadcrumbItem,
   BreadcrumbLink,
   BreadcrumbList,
   BreadcrumbPage,
   BreadcrumbSeparator,
} from "~/registry/miami/ui/breadcrumb"
import { Button } from "~/registry/miami/ui/button"
import {
   Card,
   CardContent,
   CardDescription,
   CardHeader,
   CardTitle,
} from "~/registry/miami/ui/card"
import {
   DropdownMenu,
   DropdownMenuContent,
   DropdownMenuItem,
   DropdownMenuTrigger,
} from "~/registry/miami/ui/dropdown-menu"
import { Separator } from "~/registry/miami/ui/separator"
import {
   Sidebar,
   SidebarContent,
   SidebarFooter,
   SidebarGroup,
   SidebarHeader,
   SidebarInput,
   SidebarInset,
   SidebarMenu,
   SidebarMenuButton,
   SidebarMenuItem,
   SidebarProvider,
   SidebarRail,
   SidebarTrigger,
   useSidebar,
} from "~/registry/miami/ui/sidebar"

export const iframeHeight = "800px"

export const description = "A sidebar with submenus as dropdowns."

// This is sample data.
const data = {
   navMain: [
      {
         title: "Getting Started",
         url: "#",
         items: [
            {
               title: "Installation",
               url: "#",
            },
            {
               title: "Project Structure",
               url: "#",
            },
         ],
      },
      {
         title: "Building Your Application",
         url: "#",
         items: [
            {
               title: "Routing",
               url: "#",
            },
            {
               title: "Data Fetching",
               url: "#",
               isActive: true,
            },
            {
               title: "Rendering",
               url: "#",
            },
            {
               title: "Caching",
               url: "#",
            },
            {
               title: "Styling",
               url: "#",
            },
            {
               title: "Optimizing",
               url: "#",
            },
            {
               title: "Configuring",
               url: "#",
            },
            {
               title: "Testing",
               url: "#",
            },
            {
               title: "Authentication",
               url: "#",
            },
            {
               title: "Deploying",
               url: "#",
            },
            {
               title: "Upgrading",
               url: "#",
            },
            {
               title: "Examples",
               url: "#",
            },
         ],
      },
      {
         title: "API Reference",
         url: "#",
         items: [
            {
               title: "Components",
               url: "#",
            },
            {
               title: "File Conventions",
               url: "#",
            },
            {
               title: "Functions",
               url: "#",
            },
            {
               title: "next.config.js Options",
               url: "#",
            },
            {
               title: "CLI",
               url: "#",
            },
            {
               title: "Edge Runtime",
               url: "#",
            },
         ],
      },
      {
         title: "Architecture",
         url: "#",
         items: [
            {
               title: "Accessibility",
               url: "#",
            },
            {
               title: "Fast Refresh",
               url: "#",
            },
            {
               title: "Next.js Compiler",
               url: "#",
            },
            {
               title: "Supported Browsers",
               url: "#",
            },
            {
               title: "Turbopack",
               url: "#",
            },
         ],
      },
   ],
}

export default function Page() {
   return (
      <SidebarProvider>
         <Sidebar>
            <SidebarHeader>
               <SidebarMenu>
                  <SidebarMenuItem>
                     <SidebarMenuButton size="lg" asChild>
                        <a href="#">
                           <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
                              <GalleryVerticalEnd className="size-4" />
                           </div>
                           <div className="flex flex-col gap-0.5 leading-none">
                              <span className="font-semibold">
                                 Documentation
                              </span>
                              <span className="">v1.0.0</span>
                           </div>
                        </a>
                     </SidebarMenuButton>
                  </SidebarMenuItem>
               </SidebarMenu>
            </SidebarHeader>
            <SidebarContent>
               <SidebarGroup>
                  <SidebarMenu>
                     {data.navMain.map((item) => (
                        <DropdownMenu key={item.title}>
                           <SidebarMenuItem>
                              <DropdownMenuTrigger asChild>
                                 <SidebarMenuButton className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground">
                                    {item.title}{" "}
                                    <MoreHorizontal className="ml-auto" />
                                 </SidebarMenuButton>
                              </DropdownMenuTrigger>
                              {item.items?.length ? (
                                 <DropdownMenuContent
                                    side="bottom"
                                    align="end"
                                    className="min-w-56 rounded-lg"
                                 >
                                    {item.items.map((item) => (
                                       <DropdownMenuItem
                                          asChild
                                          key={item.title}
                                       >
                                          <a href={item.url}>{item.title}</a>
                                       </DropdownMenuItem>
                                    ))}
                                 </DropdownMenuContent>
                              ) : null}
                           </SidebarMenuItem>
                        </DropdownMenu>
                     ))}
                  </SidebarMenu>
               </SidebarGroup>
            </SidebarContent>
            <SidebarFooter>
               <div className="p-1">
                  <Card className="shadow-none">
                     <form>
                        <CardHeader className="p-4 pb-0">
                           <CardTitle className="text-sm">
                              Subscribe to our newsletter
                           </CardTitle>
                           <CardDescription>
                              Opt-in to receive updates and news about the
                              sidebar.
                           </CardDescription>
                        </CardHeader>
                        <CardContent className="grid gap-2.5 p-4">
                           <SidebarInput type="email" placeholder="Email" />
                           <Button
                              className="w-full bg-sidebar-primary text-sidebar-primary-foreground shadow-none"
                              size="sm"
                           >
                              Subscribe
                           </Button>
                        </CardContent>
                     </form>
                  </Card>
               </div>
            </SidebarFooter>
            <SidebarRail />
         </Sidebar>
         <SidebarInset>
            <header className="flex h-16 shrink-0 items-center gap-2 border-b px-4">
               <SidebarTrigger className="-ml-1" />
               <Separator orientation="vertical" className="mr-2 h-4" />
               <Breadcrumb>
                  <BreadcrumbList>
                     <BreadcrumbItem className="hidden md:block">
                        <BreadcrumbLink href="#">
                           Building Your Application
                        </BreadcrumbLink>
                     </BreadcrumbItem>
                     <BreadcrumbSeparator className="hidden md:block" />
                     <BreadcrumbItem>
                        <BreadcrumbPage>Data Fetching</BreadcrumbPage>
                     </BreadcrumbItem>
                  </BreadcrumbList>
               </Breadcrumb>
            </header>
            <div className="flex flex-1 flex-col gap-4 p-4">
               <div className="grid auto-rows-min gap-4 md:grid-cols-3">
                  <div className="aspect-video rounded-xl bg-muted/50" />
                  <div className="aspect-video rounded-xl bg-muted/50" />
                  <div className="aspect-video rounded-xl bg-muted/50" />
               </div>
               <div className="min-h-[100vh] flex-1 rounded-xl bg-muted/50 md:min-h-min" />
            </div>
         </SidebarInset>
      </SidebarProvider>
   )
}
